package alocador.entidades.salas;

import java.util.List;

import alocador.entidades.salas.propriedades.Propriedade;
import alocador.exceptions.SalaInvalidaException;
import alocador.exceptions.TipoInvalidoException;

/**
 * Classe que guarda uma Classificacao de Salas
 */
public class Classificacao {

	private String id;
	private List<SubTipo> subTipos;

	/**
	 * Construtor da Classe
	 * 
	 * @param id
	 *            Id da Classificacao
	 * @param subTipos
	 *            Seus Substipos
	 */
	public Classificacao(String id, List<SubTipo> subTipos) {

		this.id = id;
		this.subTipos = subTipos;

	}

	/**
	 * Metodo acessador do ID
	 * 
	 * @return id
	 */
	public String getID() {
		return id;
	}

	/**
	 * Metodo que cria uma sala baseada nesta Classificacao
	 * 
	 * @param nome
	 *            Nome da Sala (ID)
	 * @param capacidade
	 *            Capacidade de Alunos
	 * @param apelido
	 *            Apelido da Sala
	 * @param subTipo
	 *            SubTipo da Classificacao
	 * @param propSubTip
	 *            Parametros das Propriedades do SubTipo
	 * @return SalaConcreta
	 * @throws SalaInvalidaException
	 *             Caso Algum dos Parametros sejam invalidados
	 */
	public SalaConcreta criaSala(String nome, int capacidade, String apelido,
			String subTipo, String propSubTip) throws SalaInvalidaException {
		// prop seria recebido assim:
		// propriedade:<ComoEhPraEstar>,outrapropriedade:<COmoEhPraEstar>

		List<Propriedade> propriedadesDaSala = null;

		if (subTipo == null)
			throw new TipoInvalidoException("Tipo invalido.");

		subTipo = subTipo.equals("") ? "SemTipo" : subTipo;

		for (SubTipo s : subTipos) {
			if (s.getID().equalsIgnoreCase(subTipo)) {
				propriedadesDaSala = s.getPropriedades(propSubTip);
				subTipo = s.getID(); // SubTipo da Sala ficar na escrita Padrao
										// do SubTipo
			}
		}

		if (propriedadesDaSala == null)
			throw new TipoInvalidoException("Tipo invalido.");

		return new SalaConcreta(nome, capacidade, apelido, id, subTipo,
				propriedadesDaSala);
	}
}
